package innerClass.anonymousInnerClass;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;

/**
 * @author wei.zhao
 * @description:
 * @date 2021年12月07日 18:00
 */
public class Test {

    public static void main(String[] args) {
        test01();
        test02();
    }

    /*基于接口的匿名内部类*/
    public static void test01() {
        //匿名内部类
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("这是基于接口的匿名内部类");
            }
        };
        new Thread(runnable).start();
    }

    /*基于类的匿名内部类*/
    public static void test02() {
        Student<Monitor> student1 = Student.<Monitor>builder()
                .name("张三")
                .age(18)
                .monitor(Monitor.builder().name("亮亮").age(30).build())
                .build();
        String json = JSON.toJSONString(student1);
        /**
         * 匿名内部类，TypeReference的构造方法是protected修饰的，只能在当前包和其子类可见。
         * 这里能调用因为后面有个大括号，是个匿名内部类，所以相当于可以在当前包调用。
         */
        TypeReference<Student<Monitor>> typeReference = new TypeReference<Student<Monitor>>() {
        };
        Student<Monitor> student2 = JSON.parseObject(json, typeReference);
        System.out.println(student2);
    }

}
